//package com.doudou.oauth.controller;
//
//import com.doudou.oauth.constant.SysConstant;
//import com.doudou.oauth.dto.Result;
//import com.doudou.commons.utils.BrowserUtils;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.boot.autoconfigure.security.SecurityProperties;
//import org.springframework.http.HttpStatus;
//import org.springframework.security.web.DefaultRedirectStrategy;
//import org.springframework.security.web.RedirectStrategy;
//import org.springframework.security.web.savedrequest.HttpSessionRequestCache;
//import org.springframework.security.web.savedrequest.RequestCache;
//import org.springframework.security.web.savedrequest.SavedRequest;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.ResponseStatus;
//import org.springframework.web.bind.annotation.RestController;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.io.IOException;
//
///**
// * @author 傻男人
// * @date 2020-05-08 22:48
// * @describe
// */
//@Slf4j
//@RestController
//public class BrowserSecurityController {
//
//    //拿到引发跳转的请求(HttpSessionRequestCache把当前的请求缓存到Session中)
//    private RequestCache requestCache = new HttpSessionRequestCache();
//
//    private RedirectStrategy redirectStrategy = new DefaultRedirectStrategy();
//
//    //当需要身份认证时，跳转到这里
//    @RequestMapping(SysConstant.DEFAULT_UNAUTHENTICATION_URL)
//    @ResponseStatus(code= HttpStatus.UNAUTHORIZED) //不是html请求时，返回401状态码
//    public Result requireAuthentication(HttpServletRequest request, HttpServletResponse response) throws IOException {
//        //之前缓存的请求（可以拿到引发跳转的请求）
//        SavedRequest savedRequest = requestCache.getRequest(request, response);
//        if (savedRequest != null) {
//            String targetUrl = savedRequest.getRedirectUrl();
//            log.info("引发跳转的请求是："+targetUrl);
//            //是否以.html结尾，如果是则跳转到登录页面
//            if (StringUtils.endsWithIgnoreCase(targetUrl, ".html")) {
//                //这个url，我们需要做成可配置的url（因为我们不可能每次都跳转到我们自己的写的固定登录页面，需要根据每个项目的不同）
//                //这个时候就需要用到**Properties 配置文件类来做灵活性配置
//                redirectStrategy.sendRedirect(request, response, SysConstant.DEFAULT_LOGIN_PAGE_URL);
//            }
//            //如果不是html请求，则返回401状态码以及错误信息
//        }
//        if(BrowserUtils.isBrowser(request)){
//            log.info("引发跳转的请求是："+ request.getRequestURL());
//            redirectStrategy.sendRedirect(request, response, SysConstant.DEFAULT_LOGIN_PAGE_URL);
//        }
//        return Result.fail("访问的服务需要身份认证，请引导用户到登录页");
//    }
//}